맨위로가기

소프트웨어 프레임워크

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

소프트웨어 프레임워크는 소프트웨어 개발을 용이하게 하기 위해 시스템 구축에 필요한 표준적이고 하위 레벨의 세부 사항을 추상화하여 개발자가 상위 레벨의 요구 사항 구현에 집중할 수 있도록 돕는 것을 목표로 한다. 웹 애플리케이션 프레임워크와 같은 예시처럼, 프레임워크는 개발 시간을 단축시키지만, 코드 비대화, 학습 시간, 특정 벤더 종속성 등의 단점도 존재한다. 프레임워크는 고정 지점과 가변 지점으로 구성되며, 객체 지향 프로그래밍 환경에서 추상 클래스와 구체 클래스를 활용한다. 다양한 종류의 프레임워크가 존재하며, 웹 프레임워크, GUI 프레임워크, .NET, Java, PHP 등 다양한 플랫폼과 분야에서 활용된다.

더 읽어볼만한 페이지

  • 통합 개발 환경 - 터보 파스칼
    필립 칸이 개발하고 안데르스 헤일스베르그가 기반을 다진 터보 파스칼은 저렴한 가격, 빠른 컴파일, 사용하기 쉬운 IDE를 특징으로 1980년대 PC 프로그래밍에 혁신을 가져왔으며, 여러 기능 추가를 거쳐 델파이 등장 후 레거시 기술이 되었고 일부 버전은 프리웨어로 배포된다.
  • 통합 개발 환경 - IntelliJ IDEA
    IntelliJ IDEA는 JetBrains에서 개발한 자바 통합 개발 환경(IDE)으로, 코드 탐색 및 리팩토링 기능으로 주목받았으며, 다양한 개발 환경의 기반이 되었고, Java, Scala, Kotlin 등을 지원한다.
  • 객체 지향 프로그래밍 - Is-a
    Is-a 관계는 객체 지향 프로그래밍에서 한 유형이 다른 유형의 하위 유형임을 나타내는 관계로, 상속, 서브타이핑, 리스코프 치환 원칙과 관련되며, C++, Python, Java 등에서 표현된다.
  • 객체 지향 프로그래밍 - 객체 (컴퓨터 과학)
    객체는 객체 지향 프로그래밍에서 데이터와 조작을 묶어 메시지를 수신하고, 프로그램의 개념을 표현하며 가시성과 재사용성을 높이는 실체이다.
  • 소프트웨어 디자인 패턴 - 모델-뷰-컨트롤러
    모델-뷰-컨트롤러(MVC)는 소프트웨어 디자인 패턴으로, 응용 프로그램을 모델, 뷰, 컨트롤러 세 가지 요소로 분리하여 개발하며, 사용자 인터페이스 개발에서 데이터, 표현 방식, 사용자 입력 처리를 분리해 유지보수성과 확장성을 높이는 데 기여한다.
  • 소프트웨어 디자인 패턴 - 스케줄링 (컴퓨팅)
    스케줄링은 운영 체제가 시스템의 목적과 환경에 맞춰 작업을 관리하는 기법으로, 장기, 중기, 단기 스케줄러를 통해 프로세스를 선택하며, CPU 사용률, 처리량 등을 기준으로 평가하고, FCFS, SJF, RR 등의 알고리즘을 사용한다.
소프트웨어 프레임워크
개요
유형소프트웨어 라이브러리
설명응용 프로그램의 아키텍처를 결정하는 재사용 가능한 디자인
다른 이름소프트웨어 프레임워크
상세 정보
종류소프트웨어
관련 항목API
소프트웨어 라이브러리
제어 반전
디자인 패턴 (소프트웨어)
아키텍처 패턴
플러그인 (컴퓨팅)
소프트웨어 프레임워크 관련 정보
설명특정 플랫폼을 위한 소프트웨어 개발을 더 쉽고 빠르게 하기 위해 제공되는 소프트웨어의 추상화이다.
이것은 일반적인 기능을 제공하여 개발자가 특정 소프트웨어에 대한 코드를 작성하는 데 선택적으로 변경할 수 있도록 한다.
소프트웨어 프레임워크는 일반적인 용도로 사용될 수 있지만, 특정 유형의 작업에 특화된 경우도 있다.
소프트웨어 프레임워크의 예시Angular
React
Vue.js
ASP.NET
Spring
Django
Ruby on Rails
Laravel
Flutter (소프트웨어)
SwiftUI
Compose (Jetpack)

2. 배경 및 목적

소프트웨어 프레임워크 설계자들은 개발자와 프로그래머가 시스템의 표준적인 하위 수준 세부 사항을 처리하는 대신 소프트웨어 요구 사항을 충족하는 데 시간을 할애하도록 함으로써 전반적인 개발 시간을 줄이는 것을 목표로 한다.[2] 예를 들어, 웹 프레임워크를 사용하여 은행 웹사이트를 개발하는 팀은 요청 처리 및 상태 관리 메커니즘이 아닌 은행 업무와 관련된 코드를 작성하는 데 집중할 수 있다.

프레임워크는 프로그램의 크기를 증가시키는 "코드 비대화" 현상을 야기하기도 한다. 또한, API의 복잡성으로 인해 프레임워크 사용법을 배우는 데 추가 시간을 할애해야 하기 때문에 개발 시간 단축이라는 목표를 달성하지 못할 수도 있다는 비판도 있다.[13] 그러나 일단 프레임워크를 배우면, 향후 프로젝트는 더 빠르고 쉽게 완료될 수 있다는 장점도 있다.

3. 장점 및 단점

소프트웨어 프레임워크는 상태 관리와 같은 하위 수준의 세부 사항 처리 시간을 줄여주고, 개발자가 핵심 기능(예: 은행 업무) 개발에 집중할 수 있도록 하여 소프트웨어 개발 생산성 향상에 기여한다.[2] 이는 객체 지향 프로그래밍의 특징과도 연결된다.[13]

하지만 프레임워크는 코드 비대화, 학습 비용, 특정 프레임워크 종속성 심화 등의 단점을 가질 수 있다. (자세한 내용은 "비판적 시각" 섹션 참고)

3. 1. 비판적 시각

소프트웨어 프레임워크는 코드의 크기를 증가시켜 "코드 비대화" 현상을 유발할 수 있다는 비판이 있다.[13] 또한, 여러 프레임워크가 중복되거나 경쟁하는 요소를 포함하고, API가 복잡하게 얽혀있어 이러한 문제가 발생할 수 있다.

프레임워크 사용법을 익히는 데 시간이 걸려 개발 기간 단축이라는 목표를 달성하지 못할 수 있다는 지적도 있다.[13] 특히 개발자가 특정 프레임워크를 처음 접하는 경우 이러한 문제가 두드러진다. 그러나 일단 프레임워크 사용법을 배우고 나면, 이후 프로젝트에서는 더 빠르고 쉽게 개발을 진행할 수 있다는 반론도 존재한다.

일부에서는 프레임워크가 특정 벤더나 버전에 종속될 위험이 있다고 주장한다.[13] 프레임워크의 버전 업으로 인해 작동 사양이 변경되거나 API/ABI 호환성이 없어질 수 있기 때문이다. 또한, 독점적인 프레임워크의 경우, 결함이 발견되었을 때 원인 파악 및 해결이 늦어질 수 있다는 문제도 제기된다.

프레임워크 선택의 중요성 역시 강조된다.[13] 개발 도중 선택한 프레임워크가 개발 요구사항을 충족하지 못하거나, 개발 및 제공이 중단될 경우, 다른 프레임워크로 전환해야 하는 상황이 발생할 수 있기 때문이다.

4. 종류 및 예시

소프트웨어 프레임워크는 특정 문제 영역에 초점을 맞춘 기능을 제공하며, 다양한 종류가 있다. 몇 가지 예시는 다음과 같다.


  • 예술적 드로잉, 작곡, 기계 CAD[23][24]
  • 금융 모델링 애플리케이션[25]
  • 지구 시스템 모델링 애플리케이션[26]
  • 의사결정 지원 시스템[27]
  • 미디어 재생 및 제작
  • Ajax 프레임워크 / 자바스크립트 프레임워크
  • 미들웨어
  • Cactus 프레임워크 - 고성능 과학 컴퓨팅
  • 엔터프라이즈 아키텍처 프레임워크
  • OpenCV - 컴퓨터 비전 개발 프레임워크
  • Oracle Application Development Framework
  • 멀웨어, 예: Pipedream
  • Php4delphi
  • OpenSilver Framework - 마이크로소프트 실버라이트, WPF, LightSwitch 기반의 레거시 애플리케이션을 WebAssembly 애플리케이션으로 포팅 지원.

4. 1. 웹 프레임워크

웹 프레임워크는 웹 애플리케이션 개발을 지원하는 소프트웨어 프레임워크이다. 웹 프레임워크는 요청 처리, 세션 관리, 데이터베이스 연동 등의 기능을 제공한다.[19] 대표적인 웹 프레임워크로는 자바 기반의 스프링 프레임워크, 파이썬 기반의 장고, 루비 기반의 레일즈, PHP 기반의 라라벨 등이 있다.[27]

4. 2. GUI 프레임워크

애플리케이션 프레임워크는 일반적인 그래픽 사용자 인터페이스(GUI) 애플리케이션 개발에 사용되는 소프트웨어 프레임워크이다.[23][24] Qt, .NET Framework, JavaFX 등은 GUI 프레임워크의 예시이다.

4. 3. 기타 프레임워크


  • 드로잉, 작곡, 기계 CAD[23][24]
  • 금융 모델링 애플리케이션[25]
  • 지구 시스템 모델링 애플리케이션[26]
  • 의사결정 지원 시스템[27]
  • 미디어 재생 및 저작
  • Ajax 프레임워크 / 자바스크립트 프레임워크
  • 웹 프레임워크
  • 미들웨어
  • Cactus 프레임워크 - 고성능 과학 컴퓨팅
  • 애플리케이션 프레임워크 - 일반 GUI 애플리케이션
  • 엔터프라이즈 아키텍처 프레임워크
  • OpenCV - 컴퓨터 비전 개발 프레임워크
  • Oracle Application Development Framework
  • Laravel (PHP 프레임워크)
  • 멀웨어, 예: Pipedream
  • Php4delphi
  • OpenSilver Framework - 마이크로소프트 실버라이트, WPF, LightSwitch 기반의 레거시 애플리케이션을 WebAssembly 애플리케이션으로 포팅 지원.

5. 아키텍처

프리에 따르면, 소프트웨어 프레임워크는 '고정 지점'과 '가변 지점'으로 구성된다.[8] 고정 지점은 소프트웨어 시스템의 전반적인 아키텍처, 즉 기본 구성 요소와 그들 간의 관계를 정의하며, 애플리케이션 프레임워크의 어떤 인스턴스에서도 변경되지 않고 고정되어 유지된다. 가변 지점은 프레임워크를 사용하는 프로그래머가 자체 프로젝트에 특정한 기능을 추가하기 위해 자체 코드를 추가하는 부분을 나타낸다.[20]

객체 지향 프로그래밍 환경에서 프레임워크는 추상 클래스와 구체 클래스로 구성된다. 이러한 프레임워크의 인스턴스화는 기존 클래스를 객체 조합하고 서브클래스로 만드는 것으로 구성된다.[9] 필요한 기능은 '고정 지점'을 불변 메서드로, '가변 지점' 또는 훅 메서드로 알려진 템플릿 메서드 패턴을 사용하여 구현할 수 있다. 상위 클래스의 불변 메서드는 기본 동작을 제공하는 반면, 각 서브클래스의 훅 메서드는 사용자 지정 동작을 제공한다.

소프트웨어 프레임워크는 제어 반전(Inversion of Control, IoC) 원칙, 즉 "할리우드 원칙"에 의존한다.[10][11] 이는 사용자 정의 클래스(예: 새로운 서브클래스)가 미리 정의된 프레임워크 클래스로부터 메시지를 받는다는 것을 의미한다. 개발자는 일반적으로 상위 클래스 추상 메서드를 구현하여 이를 처리한다.[21][22]

6. 일반적인 프레임워크 목록

소프트웨어 프레임워크는 다음과 같은 다양한 분야에서 활용된다.


  • 드로잉, 작곡, 기계 CAD[23][24]
  • 금융 모델링 애플리케이션[25]
  • 지구 시스템 모델링 애플리케이션[26]
  • 의사결정 지원 시스템[27]
  • 미디어 재생 및 저작
  • Ajax 프레임워크 / 자바스크립트 프레임워크
  • 웹 프레임워크
  • 미들웨어
  • Cactus 프레임워크 - 고성능 과학 컴퓨팅
  • 애플리케이션 프레임워크 - 일반 GUI 애플리케이션
  • 엔터프라이즈 아키텍처 프레임워크
  • OpenCV - 컴퓨터 비전 개발 프레임워크
  • Oracle Application Development Framework
  • Laravel (PHP 프레임워크)
  • 멀웨어, 예를 들어 Pipedream
  • Php4delphi
  • OpenSilver Framework - 마이크로소프트 실버라이트, WPF, LightSwitch 기반의 레거시 애플리케이션을 WebAssembly 애플리케이션으로 포팅할 수 있도록 지원
  • CNI (Compiled Native Interface) - Java 코드와 C++로 작성된 애플리케이션 및 라이브러리를 서로 호출할 수 있도록 하는 GNU GCJ 컴파일러용 소프트웨어 프레임워크
  • Java Native Interface (JNI) - Java 가상 머신 (VM) 상에서 동작하는 Java 코드와 VM 밖에서 동작하는 네이티브 애플리케이션(해당 하드웨어 또는 OS에서 직접 동작하는 프로그램)이나 다른 언어(C 언어, C++, 어셈블리 언어 등)로 작성된 라이브러리의 상호 호출을 가능하게 함
  • Leonardi (en) - GUI 애플리케이션용 오픈 소스 애플리케이션 프레임워크
  • ActionScript Foundry (en) - ActionScript 3 와 Java로 작성된 오픈 소스 Flex 프레임워크


.NET, Java, PHP, 기타 프레임워크에 대한 자세한 내용은 하위 섹션을 참조하면 된다.

6. 1. .NET Framework


  • .NET 환경에서 데이터베이스 중심의 분산 컴퓨팅 애플리케이션 개발을 위한 RAD 프레임워크인 BFC (en)가 있다.[23]
  • .NET에서 비즈니스 객체를 사용하여 견고한 객체 지향 프로그램을 작성하는 표준 방법인 Component-based Scalable Logical Architecture (en) (CSLA)가 있다.[25]
  • .NET에서 도메인 주도 설계 원칙을 사용하여 엔터프라이즈 애플리케이션을 만들기 위한 오픈 소스 프레임워크인 Habanero.NET (en) (Habanero)가 있다.[26]

6. 2. Java


  • Spring - Java 플랫폼용 오픈 소스 애플리케이션 프레임워크이다.[23]
  • JSF - Java 플랫폼용 오픈 소스 웹 애플리케이션 프레임워크이다. 컴포넌트 기반의 이벤트 구동형 접근 방식을 통한 빠른 개발을 지원한다.[23]
  • GWT - 오픈 소스 Java 소프트웨어 개발 프레임워크이다.[23]

6. 3. PHP

Symfony는 PHP 플랫폼용 오픈 소스 애플리케이션 프레임워크이다.[23] CodeIgniter는 PHP 플랫폼용 오픈 소스 애플리케이션 프레임워크이다.[24] Zend Framework는 PHP 플랫폼과 느슨하게 결합된 컴포넌트 라이브러리를 가진 강력하고 확장 가능한 애플리케이션 프레임워크이다.[25]

6. 4. 기타


  • Rails - Ruby 플랫폼용 자유 소프트웨어 애플리케이션 프레임워크
  • Twisted - 인터넷 애플리케이션용 Python으로 작성된 오픈 소스 이벤트 구동형 애플리케이션 프레임워크
  • liferay - 오픈 소스 웹 애플리케이션 시스템용 포틀릿 프레임워크

참조

[1] 간행물 Framework Design: A Role Modeling Approach http://www.riehle.or[...] Swiss Federal Institute of Technology
[2] 웹사이트 Framework https://web.archive.[...] 2008-12-15
[3] 논문 Unidraw: a framework for building domain-specific graphical editors
[4] 간행물 Conference proceedings on Object-oriented programming systems, languages, and applications - OOPSLA '92 ACM Press 1992
[5] 간행물 Proceedings of the European conference on object-oriented programming Springer-Verlag
[6] 간행물 Architecture of the Earth System Modeling Framework (ESMF)
[7] 간행물 Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools
[8] 간행물 Meta Patterns: A Means for Capturing the Essentials of Reusable Object-Oriented Design Springer-Verlag
[9] 서적 Pattern-Oriented Software Architecture Volume 1: A System of Patterns. Chichester Wiley
[10] 서적 Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process Prentice Hall
[11] 서적 Design Patterns Addison-Wesley
[12] 간행물 Framework Design: A Role Modeling Approach http://www.riehle.or[...] Swiss Federal Institute of Technology
[13] 웹사이트 Framework http://docforge.com/[...] 2008-12-15
[14] 간행물 Unidraw: a framework for building domain-specific graphical editors
[15] 간행물 Documenting frameworks using patterns ACM Press
[16] 간행물 The RTL system: a framework for code optimization Springer-Verlag
[17] 간행물 Proceedings of the European conference on object-oriented programming Springer-Verlag
[18] 간행물 Architecture of the Earth System Modeling Framework (ESMF)
[19] 간행물 Software Frameworks for Developing Decision Support Systems - A New Component in the Classification of DSS Development Tools
[20] 간행물 Meta Patterns-A Means For Capturing the Essentials of Reusable Object-Oriented Design Springer-Verlag
[21] 문서 Javaなどではインタフェースの場合もあり、その場合は「インタフェースを実装した」となる
[22] 서적 Pattern-Oriented Software Architecture Volume 1: A System of Patterns. Chichester Wiley
[23] 간행물 Unidraw: a framework for building domain-specific graphical editors
[24] 간행물 Documenting frameworks using patterns ACM Press
[25] 간행물 Proceedings of the European conference on object-oriented programming Springer-Verlag
[26] 간행물 Architecture of the Earth System Modeling Framework (ESMF)
[27] 간행물 Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com